package com.xuecheng.media.api;


import com.xuecheng.model.PageParams;
import com.xuecheng.model.PageResult;
import com.xuecheng.media.model.dto.QueryMediaParamsDto;
import com.xuecheng.media.model.dto.UploadFileParamsDto;
import com.xuecheng.media.model.dto.UploadFileResultDto;
import com.xuecheng.media.model.po.MediaFiles;
import com.xuecheng.media.service.MediaFileService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

/**
 * @description 媒资文件管理接口
 * @author Mr.M
 * @date 2022/9/6 11:29
 * @version 1.0
 */
 @Api(value = "媒资文件管理接口",tags = "媒资文件管理接口")
 @RestController
 @RequiredArgsConstructor
 @Slf4j
public class MediaFilesController {
     private final MediaFileService mediaFileService;


    @ApiOperation("媒资列表查询接口")
    @PostMapping("/files")
    public PageResult<MediaFiles> list(PageParams pageParams, @RequestBody QueryMediaParamsDto queryMediaParamsDto){
        Long companyId = 1232141425L;
        log.info("媒资列表查询接口:{}",queryMediaParamsDto);
        return mediaFileService.queryMediaFiels(companyId,pageParams,queryMediaParamsDto);
    }
//
//    @ApiOperation("通用文件上传接口")
//    @RequestMapping(value = "/upload/coursefile",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
//    @ResponseBody
//    //RequestPart -
//    //value:绑定的参数名称，参数值为String类型。
//    //name:绑定的参数名称，参数值为String类型。name和value可以同时使用，但两者的值需一致，否则会出现错误。
//    public UploadFileResultDto upload(@RequestParam("filedata") MultipartFile upload,
//                                      @RequestParam(value = "folder",required=false) String folder,
//                                      @RequestParam(value = "objectName",required=false) String objectName) throws IOException {
//        UploadFileParamsDto uploadFileResultDto = new UploadFileParamsDto ();
//        Long companyId = 1232141425L;
//
//        //文件名称
//        uploadFileResultDto.setFilename(upload.getOriginalFilename());
//        //文件类型
//        uploadFileResultDto.setFileType("001001");
//        //文件大小
//        uploadFileResultDto.setFileSize(upload.getSize());
//        long w=upload.getSize();
//        //问价标签
//        uploadFileResultDto.setTags("课程图片");
//        //创建临时文件
//        File tempFile = File.createTempFile("minio", "temp");
//        //上传的文件拷贝到临时文件
//        upload.transferTo(tempFile);
//        //文件路径
//        //getPath得到的是构造参数的路径。
//        //getAbsolutePath得到的是全路径。如果构造参数是相对路径，则返回当前目录的绝对路径+构造参数路径；如果是绝对路径则直接返回
//        String path = tempFile.getAbsolutePath();
//        //上传文件
//        return mediaFileService.uploadFile(companyId,path,uploadFileResultDto);
//
//    }
@ApiOperation("上传文件")
@RequestMapping(value = "/upload/coursefile",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@ResponseBody
public UploadFileResultDto upload(@RequestPart("filedata") MultipartFile filedata,
                                  @RequestParam(value = "folder",required=false) String folder,
                                  @RequestParam(value = "objectName",required=false) String objectName) throws IOException {
    Long companyId = 1232141425L;
    UploadFileParamsDto uploadFileParamsDto = new UploadFileParamsDto();
    //文件大小
    uploadFileParamsDto.setFileSize(filedata.getSize());
    //图片
    uploadFileParamsDto.setFileType("001001");
    //文件名称
    uploadFileParamsDto.setFilename(filedata.getOriginalFilename());//文件名称
    //标签名称
    uploadFileParamsDto.setTags("课程图片");
    //文件大小
    long fileSize = filedata.getSize();
    uploadFileParamsDto.setFileSize(fileSize);
    //创建临时文件
    File tempFile = File.createTempFile("minio", "temp");
    //上传的文件拷贝到临时文件
    filedata.transferTo(tempFile);
    //文件路径
    String absolutePath = tempFile.getAbsolutePath();
    //上传文件
    UploadFileResultDto uploadFileResultDto = mediaFileService.uploadFile(companyId, absolutePath, uploadFileParamsDto,objectName);
    //删除临时文件
    tempFile.delete();
    return uploadFileResultDto;
}
}
